package com.isesol.ime.enums;

import com.fasterxml.jackson.annotation.*;

/**
 * 接口返回错误码枚举类
 * <p>
 *     定义接口对象返回错误码集合
 * </p>
 *
 * @author peter zhang
 * @version: ErrorCode.java, v 1.0 2016/02/03
 */
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ErrorCode {

	/**
	 * 参数校验不通过 ，未明确具体参数的情况使用该枚举
	 */
	PARAMETER_VALID_NOT_PASS("PARAMETER_VALID_NOT_PASS", "参数校验不通过"),

	/**
	 * 参数id 已经存在
	 */
	PARAM_ALREADY_EXISTS("PARAMID_ALREADY_EXISTS EXISTS","参数已经存在"),

	/**
	 * 桉树不存在
	 */
	PARAM_NOT_EXISE("PARAM_NOT_EXISE","参数不存在"),

	/**
	 * 参数版本不一致
	 */
	PARAM_VERSION_DIFFERENT("PARAM_VERSION_DIFFERENT","参数版本不一致"),

	/**
	 * 参数使用中，删除失败
	 */
	PARAM_IN_USING("PARAM_IN_USING","参数使用中，删除失败"),

	/**
	 * 报文复制参数异常
	 */
	MachineToolMessageCopyDTO_PARAMS_ERROR("MachineToolMessageCopyDTO_PARAMS_ERROR","报文复制参数异常"),

	/**
	 * 源报文定远参数为空
	 */
	MachineToolMessageCopyDTO_SOURCE_MSG_ERROR("MachineToolMessageCopyDTO_SOURCE_MSG_ERROR","源报文订阅参数为空"),

	/**
	 * 源报文不存在
	 */
	MachineToolMessageCopyDTO_SOURCE_MSG_NOTFOUND("MachineToolMessageCopyDTO_SOURCE_MSG_NOTFOUND","源报文不存在"),

	/**
	 * 报文使用中，无法删除
	 */
	MachineToolMessage_IN_USE("MachineToolMessage_IN_USE","报文使用中，无法删除"),

	/**
	 * 报文id 已经存在
	 */
	MESSAGEID_ALREADY_EXISTS("MESSAGEID_ALREADY_EXISTS","报文ID已经存在"),

	/**
	 * 报文id 不匹配
	 */
	MESSAGEID_NOT_COMPARE("MESSAGEID_NOT_COMPARE","报文ID不匹配"),
	/**
	 * 报文不存在
	 */
	MESSAGE_NOT_EXISTS("MESSAGE_NOT_EXISTS","报文不存在"),

	/**
	 * 机床id不存在
	 */
	MACHINEID_NOT_EXISTS("MACHINEID_NOT_EXISTS","机床id不存在"),

	/**
	 * SUBSCRIPTION ID 已经存在
	 */
	SUBSCRID_ALREADY_EXISTS("SUBSCRID_ALREADY_EXISTS","SUBSCRIPTION ID 已经存在"),

	/**
	 * SUBSCRIPTION ID 已经存在
	 */
	SUBSCRID_ERROR("SUBSCRID_ERROR","SUBSCRIPTION ID异常，存在多个"),

	/**
	 * 该条订阅不存在
	 */
	SUBSCR_NOT_EXIST("SUBSCR_NOT_EXIST","该条订阅不存在"),

	/**
	 * 该条订阅不存在
	 */
	MACHINEID_REPEAT("MACHINEID_REPEAT","机床ID重复"),

	/**
	 * 源机床id不存在
	 */
	SOURCE_MACHINEID_ERROR("SOURCE_MACHINEID_ERROR","机床ID（复制源）不存在"),

	/**
	 * 报文订阅参数不存在
	 */
	MESSAGE_PARAM_ERROR("MESSAGE_PARAM_NOT_EXISTS","订阅参数错误,不存在或类型不匹配"),

	/**
	 * 无效id
	 */
	ID_INVALID("ID_INVALID", "无效id"),

	/**
	 * id缺失
	 */
	ID_MISSING("ID_MISSING", "id缺失"),


	/**
	 * 无效token
	 */
	TOKEN_INVALID("TOKEN_INVALID", "无效token"),

	/**
	 * 系统错误
	 */
	SYSTEM_ERROR("SYSTEM_ERROR", "系统错误"), ;

	/**
	 * 枚举代码
	 */
	private final String code;

	/**
	 * 枚举信息
	 */
	private final String message;

	/**
	 * 私有构造方法
	 *
	 * @param code
	 * 		错误简码
	 * @param message
	 * 		错误信息描述
	 */
	ErrorCode(String code, String message){

		this.code = code;
		this.message = message;
	}

	/**
	 * 根据代码获取枚举
	 */
	public static ErrorCode getEnumByCode(String code){

		for (ErrorCode errorCode : ErrorCode.values()){
			if (errorCode.getCode().equalsIgnoreCase(code)){
				return errorCode;
			}
		}
		return ErrorCode.SYSTEM_ERROR;
	}

	public String getCode(){

		return code;
	}

	public String getMessage(){

		return message;
	}

	@Override
	public String toString(){

		return "ErrorCode{" +
				"code='" + code + '\'' +
				", message='" + message + '\'' +
				"} " + super.toString();
	}
}

